﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;
using System.Diagnostics;
using Microsoft.VisualBasic.Logging;
using System.Xml;

namespace MigrationTool
{
    /// <summary>
    /// ログ出力クラス
    /// </summary>
    static class FileLogTrace
    {

        #region インスタンス
        private static TraceSource appTrace = new TraceSource("Migration");
        private static TraceSource appResult = new TraceSource("MigrationResult");
        private static TraceSource appError = new TraceSource("MigrationError");
        #endregion

        #region コンストラクタ
        /// <summary>
        /// LogTraceの静的コンストラクタ
        /// </summary>
        static FileLogTrace()
        {

        }
        #endregion

        #region メソッド
        /// <summary>
        /// リスナーの解放
        /// </summary>
        public static void ListenerRemove()
        {
            appTrace.Listeners.Remove(LogConst.REMOVE_DEFAULT);
            appResult.Listeners.Remove(LogConst.REMOVE_DEFAULT);
            appError.Listeners.Remove(LogConst.REMOVE_DEFAULT);
        }

        /// <summary>
        /// トレースログファイルに出力
        /// </summary>
        /// <param name="strMessage">メッセージ</param>
        public static void WriteTraceLog(string strMessage)
        {
            appTrace.TraceEvent(System.Diagnostics.TraceEventType.Information, 0 , strMessage);
            appTrace.Flush();
        }

        /// <summary>
        /// 結果ログファイルに出力
        /// </summary>
        /// <param name="strMessage">メッセージ</param>
        public static void WriteResultLog(string strMessage,int cnt)
        {
            appResult.TraceEvent(System.Diagnostics.TraceEventType.Information, cnt, DateTime.Now.ToString(LogConst.LOG_TIMEFORMAT) + " " + strMessage);
            appResult.Flush();
        }

        /// <summary>
        /// エラーログログファイルに出力
        /// </summary>
        /// <param name="strMessage">メッセージ</param>
        public static void WriteErrorLog(string strMessage)
        {
            appError.TraceEvent(System.Diagnostics.TraceEventType.Error, 0, strMessage);
            appError.Flush();
        }
        #endregion
    }
        /// <summary>
    /// ログ定数クラス
    /// </summary>
    public static class LogConst
    {
        #region 定数
        public const string REMOVE_DEFAULT = "Default";
        public const string LOG_TIMEFORMAT = "HH:mm:ss";
        public const string LOG_START = "{0} 開始 ";
        public const string LOG_INPROGRESS = "{0} 進行中... ";
        public const string LOG_INPROGRESS2 = "進行中... ";
        public const string LOG_ADD = "{0} 追加 ";
        public const string LOG_COMPARE = "差分確認 ";
        public const string LOG_COMPAREITEM = "メールアイテムの比較 ";
        public const string LOG_CANCEL = "{0} 中断 ";
        public const string LOG_SUCCESS = "成功";
        public const string LOG_OK = " ＯＫ!";
        public const string LOG_NO_EXIST = " 取得に失敗しました";
        public const string LOG_FAILD = "失敗";
        public const string LOG_START2 = "開始";
        public const string LOG_END = "{0} 終了! ";
        public const string LOG_INVALIDVALUE = "不正な値のため";
        public const string LOG_ERROR = "{0} 異常終了 ";
        public const string LOG_NOT_MATCH = "{0} 不一致 ";
        public const string LOG_COMPLETE = "{0} 完了!";
        public const string LOG_ITEMCOUNT = " メールアイテム数";
        public const string LOG_SENDDATE = " 最古メールの送信日付";
        public const string LOG_ATTACHMENTCOUNT = " 最古メールの添付ファイル数";
        public const string LOG_IMPORT = "{0} インポート {1}";
        public const string LOG_ALIAS = "{0}:{1}:{2}";
        public const string LOG_RESULT_IMPORT = "インポート";
        public const string LOG_RESULT_EXPORT = "エクスポート";
        public const string LOG_RESULT_SUCCESS = "{0}:{1}　成功";
        public const string LOG_RESULT_FAILED = "{0}:{1}　失敗";
        public const string FILE_ERROR_LOG = @"{0}\log\MigrationError.log";
        public const string FILE_RESULT_LOG = @"{0}\log\MigrationResult.log";
        #endregion
    }
}
